import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg';

export default (appInfo: EggAppInfo) => {
  const config = {} as PowerPartial<EggAppConfig>;

  // override config from framework / plugin
  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1639531294108_7895';

  // sequelize配置
  config.sequelize = {
    dialect: 'mysql',
    host: 'localhost',
    port: 3306,
    database: 'test',
    password: '123456',
    // 时区，sequelize有很多自动时间的方法，都是和时区相关的，记得设置成东8区（+08:00）
    timezone: '+08:00',
  };

  // 关闭csrf
  config.security = {
    csrf: {
      enable: false,
    },
  };

  // 允许跨域的方法
  config.cors = {
    origin: '*',
    allowMethods: 'GET, PUT, POST, DELETE, PATCH',
  };

  // 中间件
  config.middleware = [ 'auth', 'notFountHandler' ];

  // jwt 配置
  config.jwt = {
    secret: 'ylw', // 自定义 token 的加密条件字符串
    match: /^\/api/, // 匹配的请求，会走jwt校验，否则忽略；例如登录接口需要被忽略；
    sign: {	// jwt.sign(***,***,[options,***])方法中，options的默认设置可以在这里配置；
      expiresIn: '60m', // 多少s后过期。actionToken.js中,jwt.sing(plyload,secret,{expiresIn:number})会被合并，调用时设置优先级更高;
    },
  };

  // 路由权限白名单
  config.routerWhiteList = [
    '/',
    '/api/v1/user/login',
    '/api/v1/user/register',
    '/api/v1/user/captcha',
  ],

  // redis配置
  config.redis = {
    client: {
      port: 6379,
      host: '127.0.0.1',
      password: '',
      db: 0,
    },
  };

  // 配置session
  config.session = {
    // 设置session cookie里面的key
    key: 'SESSION_ID',
    // 设置最大的过期时间
    maxAge: 30 * 1000 * 60,
    // 设置是否只服务端可以访问
    httpOnly: true,
    // 设置是否加密
    encrypt: true,
    // 设置为true每次刷新页面的时候session都会被延期
    renew: true
  }

  // redis过期失效时间
  config.redisExpiryTime = 3600;

  // 设置cookie可读
  config.cookies = {
    httpOnly: false,
  };

  // 上传文件路径
  config.UPLOAD_PATH = '/public/admin/uploads/';

  config.multipart = {
    fileSize: '100mb',
    fileExtensions:['.txt', '.pdf', '.xlsx', '.xls', '.doc', '.docx', '.ppt', '.pptx']
  }

  // oss存储
  config.oss = {  // 这里需要的东西去自己的服务器里看，我用的阿里云
    client: {
      accessKeyId: 'LTAI5t9h4Azbd7NeKHgQAaM6',
      accessKeySecret: 'e30joHSGJ73OWljlE8Enl0VAznuOD7',
      bucket: 'eggyoke',
      // endpoint: 'oss-cn-beijing.aliyuncs.com',
      // timeout: '60s',
      region:"oss-cn-beijing"
    },
  }

  config.io = {
    init: { }, // passed to engine.io
    namespace: {
      '/': {
        connectionMiddleware: ["authio"],
        packetMiddleware: [],
      },
      // 配置 redis
      redis: {
        host: '127.0.0.1',
        port: 6379,
      },
    },
  }

  // add your special config in here
  const bizConfig = {
    sourceUrl: `https://github.com/eggjs/examples/tree/master/${appInfo.name}`,
  };

  // the return config will combines to EggAppConfig
  return {
    ...config,
    ...bizConfig,
  };
};
